package cn.itsource.random;

import java.util.Random;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;

/**
 *	获取随机数：
 *		1. 应用： 验证码，彩票、抽奖、摇号、贪吃蛇、砸地鼠、。。。。。
 *		2. 获取方式4种：
 *			掌握；前两种
 *			1.	ThreadLocalRandom类：推荐使用
 *				1.1 获取对象
 *					static ThreadLocalRandom current()  
 *				1.2 调用方法：
 *					int nextInt(int origin, int bound)  生成随机数范围：[origin,bound);
 *			
 *		2.	UUID： 表示128位二进制值，32位十六进制	推荐使用		
 *			一般用来做数据库唯一标识符：主键（primary key）
 *			使用：
 *					static UUID randomUUID();
					UUID.randomUUID();
					
		==============================不建议用================================
 *		3.	Random类：不推荐用
 *				1.创建对象：
 *					Random() 创建一个新的随机数生成器。  
					Random(long seed) 使用单个 long种子创建一个新的随机数生成器。  	不推荐用long种子，System.currentTimeMillis();
				2. 调用方法
 *					int nextInt() 返回值为 double值为正号，大于等于 0.0 ，小于 1.0 。  生成随机数范围：[0.0,1.0);
					int nextInt(int bound)  生成直到范围内的随机数	 生成随机数范围：[0,bound);
 *		4.	Math类：	
				调用方法：
				static double random() 返回值为 double值为正号，大于等于 0.0 ，小于 1.0 。[0.0,1.0)  
 *		
 */
public class RandomTest {

	public static void main(String[] args) {
		/*
		 * 1.	ThreadLocalRandom类：推荐使用
 *				1.1 获取对象
 *					static ThreadLocalRandom current()  
 *				1.2 调用方法：
 *					int nextInt(int origin, int bound)  生成随机数范围：[origin,bound);
		 */
		ThreadLocalRandom current = ThreadLocalRandom.current();
		
		//调用方法获取指定范围内的随机数
		int nextInt = current.nextInt(3,8);//生成[3,8)
		System.out.println(nextInt);
		
		/*
		 * 2.	UUID： 表示128位二进制值，32位十六进制	推荐使用		
 *			一般用来做数据库唯一标识符：主键（primary key）
 *			使用：
 *					static UUID randomUUID();
					UUID.randomUUID();
		 */
		UUID randomUUID = UUID.randomUUID();
		System.out.println(randomUUID);
		
		//扩展：下划线没有实际作用，就是让位数可读性好
		System.out.println(1234_1234_111L);
		
		/*
		 * 了解使用：
		 * 3.	Random类：不推荐用
 *				1.创建对象：
 *					Random() 创建一个新的随机数生成器。  
					Random(long seed) 使用单个 long种子创建一个新的随机数生成器。  	不推荐用long种子，System.currentTimeMillis();
				2. 调用方法
 *					int nextInt() 生成int范围内的任意一个数字。  
					int nextInt(int bound)  生成直到范围内的随机数	 生成随机数范围：[0,bound);
		 */
		Random random = new Random();
		
		//调用方法
		int nextInt2 = random.nextInt();
		System.out.println(nextInt2);
		
		//生成3~7：3 4 5 6 7 
		int nextInt3 = random.nextInt(5);//生成[0,5)之间的数字
		System.out.println(nextInt3 + 3);//加上3就是生成的是3~7之间的数
		
		//	Random(long seed) 使用单个 long种子创建一个新的随机数生成器。
//		Random random2 = new Random(1L);//如果种子是固定的，则随机数是固定的，所以需要种子可变
		Random random2 = new Random(System.currentTimeMillis());//如果种子是固定的，则随机数是固定的，所以需要种子可变
		int nextInt4 = random2.nextInt();
		System.out.println(nextInt4);
		
	}

}
